﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace Consultorio_Medico
{
    public partial class frmLogin : Form
    {
        private static Boolean correcto;

        public frmLogin()
        {
            InitializeComponent();
        }

        private void btnIngresar_Click(object sender, EventArgs e)
        {
            correcto = ingresar();

            if (correcto)
            {
                List<String> permisos = obtenerPermisosPorUsuarios(txtUser.Text);
                for (int i = 0; i < permisos.Count; i++)
                {
                    MainForm.controlAcceso(permisos[i]);
                }
                this.Close();
                this.Dispose();
            }
            else
            {
                MessageBox.Show("Usuario y/o Contraseña mal ingresada!!","Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
            }
        }

        private bool ingresar()
        {
            Boolean correcto = false;
            MySqlConnection conexion = null;
            MySqlDataReader lector = null;
            try
            {
                String cadenaConexion = "Server=Localhost;Database=consultorio;Uid=root;Pwd=123;";
                conexion = new MySqlConnection(cadenaConexion);
                MySqlCommand consulta = conexion.CreateCommand();
                consulta.CommandText = "SELECT usuario, password FROM usuarios WHERE activo = 1";
                conexion.Open();
                lector = consulta.ExecuteReader();
                while (lector.Read())
                {
                    String usuario = lector["usuario"].ToString();
                    String password = lector["password"].ToString();
                    if (usuario.Equals(txtUser.Text.Trim()) && password.Equals(txtPass.Text.Trim()))
                    {
                        correcto = true;
                        break;
                    }
                }
                lector.Close();
                lector.Dispose();
                conexion.Close();
                conexion.Dispose();
            }
            catch (Exception)
            {
                correcto = false;
                conexion.Close();
                conexion.Dispose();
            }
            return correcto;
        
        }

        private void frmLogin_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (!correcto) 
            {
                Application.Exit();
            }
        }

        private int obtenerIdUsuario(String usuario)
        {
            //obtiene el id de un usuario
            MySqlConnection conexion = null;
            MySqlDataReader lector = null;
            int idUsuario = 0;
            try
            {
                String cadenaConexion = "Server=Localhost;Database=consultorio;Uid=root;Pwd=123;";
                conexion = new MySqlConnection(cadenaConexion);
                MySqlCommand consulta = conexion.CreateCommand();
                consulta.CommandText = "SELECT id FROM usuarios WHERE usuario = @usuario";
                consulta.Parameters.AddWithValue("@usuario", usuario);
                conexion.Open();
                lector = consulta.ExecuteReader();
                while (lector.Read())
                {
                    idUsuario = Convert.ToInt16(lector["id"].ToString());
                }

                lector.Dispose();
                conexion.Close();
                conexion.Dispose();
            }
            catch (Exception)
            {
                idUsuario = 0;
                conexion.Close();
                conexion.Dispose();
            }

            return idUsuario;

        }

        private List<String> obtenerPermisosPorUsuarios(String usuario)
        {
            //obtiene los permisos asignados a un usuario
            MySqlConnection conexion = null;
            MySqlDataReader lector = null;
            List<String> permisos = null;
            try
            {
                permisos = new List<String>();
                String cadenaConexion = "Server=Localhost;Database=consultorio;Uid=root;Pwd=123;";
                conexion = new MySqlConnection(cadenaConexion);
                MySqlCommand consulta = conexion.CreateCommand();
                int id_usuario = obtenerIdUsuario(usuario);
                consulta.CommandText = "SELECT * FROM usuarios_permisos, permisos WHERE id_usuario = @id_usuario and id_permiso = id";
                consulta.Parameters.AddWithValue("@id_usuario", id_usuario);
                conexion.Open();
                lector = consulta.ExecuteReader();
                while (lector.Read())
                {
                    permisos.Add(lector["item_menu"].ToString());
                }
                lector.Close();
                lector.Dispose();
                conexion.Close();
                conexion.Dispose();
            }
            catch (Exception)
            {
                permisos = null;
                conexion.Close();
                conexion.Dispose();
            }

            return permisos;

        }

    }
}
